5.4 DriveListBox, DirListBox und FileListBox
 
Diese drei Steuerelemente sind nach der Standardinstallation noch nicht in der Toolbox vorhanden. Sie müssen in eines der Register hinzugefügt werden. Dies geschieht mit der rechten Maustaste über den Kontextmenübefehl »Toolbox anpassen«. Dort finden sich die (alten) COM-Steuerelemente und die nun neuen .NET-Frameworkkomponenten. Und dort können die drei Komponenten »DriveListBox«, »DirListBox« und »FileListBox« ausgewählt werden. Sie erscheinen danach auf dem Registerblatt.
Abbildung 5.6
Neue Steuerelemente können hinzugefügt werden.
Abbildung 5.7
Die drei Steuerelemente
Werden sie auf das neue Formular gezogen, dann wird bereits ein Laufwerk, eine Ordnerliste und werden einige Dateien aus einem Ordner angezeigt. Ein Test zeigt, dass zwar Laufwerk und Ordner geändert werden können, aber dass die Steuerelemente nicht miteinander in Zusammenhang stehen. Mit einem Doppelklick auf »DriveListBox« gelangen wir in das Ereignis »SelectedIndexChanged«. Mit der Eigenschaft »Drive« kann das aktuell gewählte Laufwerk abgefangen werden. Dieses wird an die Eigenschaft »Path« der »DirListBox« übergeben. Also beispielsweise so:
Private Sub DriveListBox1_SelectedIndexChanged(ByVal _
sender As System.Object, ByVal e As System.EventArgs) _
Handles DriveListBox1.SelectedIndexChanged
Me.DirListeBox1.Path = Me.DriveListBox1.Drive
End Sub
Analog dazu könnten »DirListBox« und »FileListeBox« synchronisiert werden:
Private Sub DirListBox1_SelectedIndexChanged(ByVal _
sender As System.Object, ByVal e As System.EventArgs) _
Handles DirListBox1.SelectedIndexChanged
Me.FileListeBox1.Path = Me.DirListBox1.Path
End Sub
Abbildung 5.8
Das korrekte Ereignis
Abbildung 5.9
Nun sind die Steuerelemente synchronisiert.
Ein Test zeigt, dass das Ändern des Laufwerkbuchstabens die entsprechenden Ordner anzeigt, dass aber das Öffnen oder Schließen eines Ordners nicht die aktuelle Dateienauswahl signalisiert. Der Grund ist schnell gefunden: Das Ereignis »SelectedIndexChanged« ist nicht das korrekte. Besser geeignet ist das Ereignis »Change«. Damit werden die jeweiligen Dateien des geöffneten Ordners angezeigt. Damit in der FileListBox nur Excel-Dateien angezeigt werden, kann die Eigenschaft »Pattern« von »*.*« auf »*.xls« gesetzt werden.
Nun kann der Benutzer einen Dateinamen in ein dafür vorbereitetes Textfeld eingeben, das anschließend weiterverarbeitet wird. An dieser Stelle wird der Dateiname erneut in »info.txt« eingetragen und die neue Excel-Mappe generiert:
Imports System.IO
...
Dim objDateiMacher As StreamWriter
Dim strPfad As String
Dim xlApp As Excel.Application
Dim xlMappe As Excel.Workbook
Dim xlBlatt As Excel.Worksheet
Dim xlZelle As Excel.Range
If Me.txtDateiName.Text = "" Then
MessageBox.Show("Bitte einen Dateinamen eingeben!")
Me.txtDateiName.Select()
Exit Sub
ElseIf Me.txtDateiName.Text.EndsWith(".xls") = False Then
Me.txtDateiname.Text = _
Me.txtDateiname.Text & ".xls"
End If
If Me.DirListeBox.Path.EndsWith("\") = True Then
strPfad = Me.DriveListeBox.Path
Else
strPfad = Me.DirListeBox.Path & "\"
End If
objDateiMacher = New _
StreamWriter(System.Environment.SystemDirectory. _
ToString & "\info.txt")
objDateiMacher.Write(strPfad & Me.txtDateiName.Text)
objDateiMacher.Close()
objDateiMacher = Nothing
xlApp = New Excel.Application()
xlApp.Visible = False
xlMappe = xlApp.Workbooks.Add()
xlBlatt = xlMappe.Worksheets(1)
xlZelle = xlBlatt.Range("A1")
xlZelle.Offset(0, 0).Value = "Nr."
xlZelle.Offset(0, 1).Value = "Datum"
xlZelle.Offset(0, 2).Value = "Name"
xlZelle.Offset(0, 2).Value = "Preis"
xlMappe.SaveAs(strPfad & Me.txtDateiName.Text)
xlMappe.Close()
xlApp.Quit()
xlZelle = Nothing
xlBlatt = Nothing
xlMappe = Nothing
xlApp = Nothing
Nun existiert die Excel-Mappe. Entweder wurde sie in »info.txt« gefunden oder der Benutzer hat sie mit dem OpenFileDialog ausgewählt oder er hat einen neuen Dateinamen angegeben, der als neue Mappe angelegt wurde. Alle drei Varianten führen dazu, dass in »info.txt« der korrekte Dateiname steht. Auf diesen wird nun zugegriffen und die Daten werden hineingeschrieben:
objDateiLeser = New StreamReader(strWinVerz & "\" & _
DATEINAME)
strExcelDateiname = objDateiLeser.ReadToEnd()
objDateiLeser.Close()
objDateiLeser = Nothing
Danach wird überprüft, ob er einen Namen in das dafür vorgesehene Textfeld eingegeben hat:
If Me.txtName.Text = "" Then
MessageBox.Show("Bitte geben Sie Ihren Namen ein!")
Me.txtName.Focus()
Exit Sub
End If
Nimmt man den Süßigkeitenautomaten, so müsste man überprüfen, ob mindestens ein Eintrag ausgewählt wurde:
If Me.lstLiszt.SelectedIndex = -1 Then
MessageBox.Show("Bitte wählen Sie einen Artikel aus!")
Else
...
Die Datei wird geöffnet und die Werte werden hineingeschrieben:
xlApp = New Excel.Application()
xlApp.Visible = False
xlMappe = xlApp.Workbooks.Open(strExcelDateiName)
xlBlatt = xlMappe.Worksheets(1)
xlZelle = xlBlatt.Range("A1")
intZeilen = xlZelle.CurrentRegion.Rows.Count
xlZelle.OffSet(intZeilen, 0).Value = intZeilen
xlZelle.OffSet(intZeilen, 1).Value = Today()
xlZelle. OffSet(intZeilen, 2).Value = _
txtName.Text
xlZelle. OffSet(intZeilen, 3).Value = txtGeld.Text
xlMappe.Save()
xlMappe.Close()
xlApp.Quit()
xlZelle = Nothing
xlBlatt = Nothing
xlMappe = Nothing
xlApp = Nothing
End If
Abbildung 5.10
Der Eintrag in info.txt
Abbildung 5.11
Die Datei wurde verschoben.
Abbildung 5.12
Der Benutzer kann nach ihr suchen.
Abbildung 5.13
Die Daten werden erfolgreich eingetragen.
|